home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48_2 / voyager7.exe / HP48SX.DOC < prev    next >
Text File  |  1991-02-23  |  39KB  |  1,286 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.                       H P   4 8 S X   I n t e r n a l s
  13.  
  14.                                Derek S. Nickel
  15.  
  16.                                23 February 1991
  17.     ================================================================
  18.         Forward
  19.     ================================================================
  20.  
  21.     This documnent describes some of the internals of the HP 48SX
  22.     calculator.  Its intended audience is people with a good under-
  23.     standing of the basic HP 48SX who want to explore the internals
  24.     of the HP 48SX.
  25.  
  26.     The information contained here is from a variety of
  27.     sources:  HP-71B Internal Design Specifications, ROM analysis
  28.     and other posted information.
  29.  
  30.     Nothing is perfect.  Double check these notes if you plan to use
  31.     the information that they contain.
  32.  
  33.     Send comments and questions to:
  34.  
  35.         Derek S. Nickel
  36.         15 Maple Lane
  37.         Walnut Creek, CA 94595-1718
  38.     ================================================================
  39.         Usage Notes
  40.     ================================================================
  41.  
  42.     In the examples, when ASC\-> is used, the last four characters
  43.     are the checksum and are not part of the object.  Note that
  44.     when atomic objects are viewed as a string (via \->ASC or the
  45.     Memory Scanner) they appear backwards.  This is because the
  46.     string representation is viewed least-significant-nibble to
  47.     most-significant nibble in left to right order, whereas binary
  48.     data is viewed in right to left order.
  49.  
  50.     Most of the examples list the internal representation as:
  51.     12345 6789 ABC DEF0
  52.  
  53.     This corresponds to a memory dump ('48 style) of:
  54.     xxxxx: 543219876CBA0FED
  55.  
  56.     or a HEX dump (VAX/VMS style) of:
  57.                       DE F0 AB C6 78 91 23 45 E#.x....         xxxxx
  58.     ================================================================
  59.         Prologs
  60.     ================================================================
  61.  
  62.     In the HP 48SX, there are many different data types.  Some are
  63.     common and easy to use: Real Number, Complex Number, Array,
  64.     String, Binary Integer, List, Directory, Algebraic, Unit,
  65.     Tagged, Graphic, Backup, Program, Global Name and Local Name.
  66.     Some are common but hard to create:  Library, Library Data and 
  67.     XLIB Name.  And some, at the user level are nonexistant:
  68.     System Binary, Long Real, Long Complex, Character, Linked Array
  69.     and Code.
  70.  
  71.     One thing that all of these data types have in common is a five
  72.     nibbles header. This header is called a prolog and it identifies
  73.     the data type of the data that follows the header.  The prolog
  74.     is the address of a machine language that 'handles' the data.
  75.     In most cases, this just involes putting a pointer to the object
  76.     on to the data stack.  Thus, when you evaluate an object that is
  77.     on the data stack, it is removed from the data stack and then it
  78.     puts itself back onto the data stack.  Some objects, though,
  79.     have a different behaviour.  Like programs; they evalute their
  80.     contents (among other things).
  81.  
  82.     Each prolog routine starts with a five nibble 'prolog signature'
  83.     (028FC).  This is not an address, but an unusual seqence of
  84.     machine language instructions.
  85.  
  86.     Voyager> ua 2933
  87.     02933: ; *** Real Number ***
  88.     02933: CF         D=D-1  A
  89.     02935: 820        HST&=  #F
  90.     02938: 465        GOC    0298F   ; MC XFER: GC, push A.A and
  91.                                      ; continue RPL
  92.     0293B: 1C4        D1=D1- 5       ; push on to data stack
  93.     0293E: 141        DAT1=A A       ; ...
  94.     02941: 142        A=DAT0 A       ; continue RPL
  95.     02944: 164        D0=D0+ 5
  96.     02947: 808C       PC=(A)
  97.     Voyager> 
  98.     ================================================================
  99.         Prologs (by prolog address)
  100.     ================================================================
  101.  
  102.     Prolog    Object Name    Type #
  103.     ------    --------------    ------
  104.     02911    System Binary      20
  105.     02933    Real Number       0
  106.     02955    Long Real      21
  107.     02977    Complex Number       1
  108.     0299D    Long Complex      22
  109.     029BF    Character      24
  110.     029E8    Array         3,4
  111.     02A0A    Linked Array      23
  112.     02A2C    String           2
  113.     02A4E    Binary Integer      10
  114.     02A74    List           5
  115.     02A96    Directory      15
  116.     02AB8    Algebraic       9
  117.     02ADA    Unit          13
  118.     02AFC    Tagged          12
  119.     02B1E    Graphic          11
  120.     02B40    Library          16
  121.     02B62    Backup          17
  122.     02B88    Library Data      26
  123.     02BAA    iType <BFh> object
  124.     02BCC    iType <CFh> object
  125.     02BEE    iType <DFh> object
  126.     02C10    iType <EFh> object
  127.     02D9D    Program           8
  128.     02DCC    Code          25
  129.     02E48    Global Name       6
  130.     02E6D    Local Name       7
  131.     02E92    XLIB Name      14
  132.     ================================================================
  133.         Prologs (by type number)
  134.     ================================================================
  135.  
  136.     Type #    Prolog    Object Name
  137.     ------    ------    --------------
  138.        0    02933    Real Number
  139.        1    02977    Complex Number
  140.        2    02A2C    String
  141.        3    029E8    Real Array
  142.        4    029E8    Complex Array
  143.        5    02A74    List
  144.        6    02E48    Global Name
  145.        7    02E6D    Local Name
  146.        8    02D9D    Program
  147.        9    02AB8    Algebraic
  148.       10    02A4E    Binary Integer
  149.       11    02B1E    Graphic
  150.       12    02AFC    Tagged
  151.       13    02ADA    Unit
  152.       14    02E92    XLIB Name
  153.       15    02A96    Directory
  154.       16    02B40    Library
  155.       17    02B62    Backup
  156.       18    none    Command
  157.       19    none    Function
  158.       20    02911    System Binary
  159.       21    02955    Long Real
  160.       22    0299D    Long Complex
  161.       23    02A0A    Linked Array
  162.       24    029BF    Character
  163.       25    02DCC    Code
  164.       26    02B88    Library Data
  165.       27    other    Unknown prolog
  166.  
  167.     Commands and Functions can be expressed as either their address
  168.     or as XLIB Names.  For example, DUP is normallay represented by
  169.     the address 1FB87, but it can also be represented by XLIB 2 269
  170.     (02E9E 002 10D).
  171.     ================================================================
  172.         Internal Object Type Numbers
  173.     ================================================================
  174.  
  175.     The following table lists the internal object types (iTypes) and
  176.     the objects that they match.  These iTypes are used in the
  177.     internal RPL operations to do argument type checking.  Note that
  178.     if the first nibble is an F, then a second nibble follows.
  179.  
  180.     Also, if a operation requires more that one argument, then each
  181.     argument will be represented as a digit in the Systen Binary
  182.     that is used for argument type checking.  For example, the
  183.     System Binary number <C15h> would mean that stack level one
  184.     must contain a List, stack level two must contain a Real Number
  185.     and stack level three must contain a Graphic.
  186.  
  187.     One nibble iTypes:
  188.     iType    Objects
  189.     ------    --------------------------------------------------------
  190.     <0h>    Any
  191.     <1h>    Real Number
  192.     <2h>    Complex Number
  193.     <3h>    String
  194.     <4h>    Array
  195.     <5h>    List
  196.     <6h>    Global Name
  197.     <7h>    Local Name
  198.     <8h>    Program
  199.     <9h>    Algebraic
  200.     <Ah>    Symbolic (Algebraic or Global Name)
  201.     <Bh>    Binary Integer
  202.     <Ch>    Graphic
  203.     <Dh>    Tagged
  204.     <Eh>    Unit
  205.  
  206.     Two nibble iTypes (starts with F):
  207.     iType    Objects
  208.     ------    --------------------------------------------------------
  209.     <Fh>    XLIB Name
  210.     <1Fh>    System Binary
  211.     <2Fh>    Directory
  212.     <3Fh>    Long Real
  213.     <4Fh>    Long Complex
  214.     <5Fh>    Linked Array
  215.     <6Fh>    Character
  216.     <7Fh>    Code
  217.     <8Fh>    Library
  218.     <9Fh>    Backup
  219.     <AFh>    Library Data
  220.     <BFh>    prolog <02BAAh>
  221.     <CFh>    prolog <02BCCh>
  222.     <DFh>    prolog <02BEEh>
  223.     <EFh>    prolog <02C10h>
  224.     <FFh>    ?? <191BEh>
  225.     ================================================================
  226.         Atomic Data Types
  227.     ================================================================
  228.  
  229.     Atomic data types are listed after each field description, in
  230.     parenthesis.  Note that some atomic data types are more atomic
  231.     than others.
  232.  
  233.     **** ASCIC ****
  234.  
  235.     ASCII counted character strings are represented by length and
  236.     data fields.  ASCII counted character strings are the basis for
  237.     Global Name, Local Name and Tagged data types, as well as
  238.     components in other objects.
  239.  
  240.       N          2  1     0
  241.     +-------------+--------+
  242.     | String Data | Length |
  243.     +-------------+--------+
  244.             Length        2
  245.  
  246.     where N = Length/2 + 1.
  247.  
  248.     **** ASCII ****
  249.  
  250.     ASCII character strings are represented as a sequence of bytes
  251.     (ASCII characters).  The length of the ASCII character string is
  252.     specified elsewhere.  ASCII character strings are called ASCII
  253.     in the field descriptions.  ASCII character strings are the
  254.     basis for String data types.
  255.  
  256.       N          0
  257.     +-------------+
  258.     | String Data |
  259.     +-------------+
  260.             Length
  261.  
  262.     **** ASCIX ****
  263.  
  264.     Extended ASCII counted character strings are represented by
  265.     length and data fields.  If the length is zero, only a single
  266.     length field is present.  If the length is non-zero, then there
  267.     are two identical length fields, one before and one after the
  268.     string data.  Extended ASCII counted character strings are the
  269.     used in Directory, Library and Backup data types.
  270.  
  271.       N   N-1 N-2         2  1     0
  272.     +--------+-------------+--------+
  273.     | Length | String Data | Length |
  274.     +--------+-------------+--------+
  275.             2        Length        2
  276.  
  277.     where N = Length/2 + 2.
  278.     Atomic Data Types (cont)
  279.  
  280.     Or, if length is zero:
  281.  
  282.       1 0
  283.     +----+
  284.     | 00 |
  285.     +----+
  286.       2
  287.  
  288.     **** BCDx ****
  289.  
  290.     BCD numbers (binary coded decimal) are represented by a mantissa,
  291.     sign and exponent fields.  These are two kinds of BCD numbers in
  292.     the HP48SX, 12-form and 15-form BCD numbers, called BCD12 and
  293.     BCD15 in the field descriptions.
  294.  
  295.     Both kinds have several things in common:
  296.  
  297.         *    A mantissa.  Each digit of the number is represented by
  298.         one nibble in the mantissa.  12-form BCD numbers have a
  299.         12 digit mantissa and 15-form BCD numbers have a 15
  300.         digit mantissa.  There is an implied decimal point after
  301.         the Most Significant Digit (msd) with respect to the
  302.         exponent.
  303.  
  304.         *    A sign nibble.  Positive numbers are represented by a
  305.         0 and negative numbers are represented by a 9.
  306.  
  307.         *    An exponent.  The exponent is in 10's compement.
  308.         12-form BCD numbers have a 3 nibble exponent and 15-form
  309.         BCD numbers have a 5 digit exponent.
  310.  
  311.     12-form BCD numbers are the basis for Real Number, Complex
  312.     Number, Real Array and Complex Array data types.
  313.  
  314.     15-form BCD numbers are the basis for Long Real and Long
  315.     Complex data types.
  316.  
  317.     BCD12:
  318.  
  319.          15 14                     3  2   0
  320.     +--+------------------------+------+
  321.     |S | msd..  Mantissa  ..lsd | Exp  |
  322.     +--+------------------------+------+
  323.      1             12              3
  324.  
  325.     BCD15:
  326.  
  327.      21 20                           5  4       0
  328.     +--+------------------------------+----------+
  329.     |S | msd...    Mantissa    ...lsd |   Exp    |
  330.     +--+------------------------------+----------+
  331.     Atomic Data Types (cont)
  332.  
  333.     **** BINx ****
  334.  
  335.     Binary integers are represented by a data field.  Binary integers
  336.     are called BINx in the field descriptions (where x = the number
  337.     of nibbles that the number occupies).  Binary integers are the
  338.     basis for Binary Integers and System Binary data types.
  339.  
  340.       N          0
  341.     +-------------+
  342.     | Binary Data |
  343.     +-------------+
  344.            x
  345.  
  346.     where N = x - 1.
  347.  
  348.     **** CHAR ****
  349.  
  350.     ASCII characters are represented by a one byte (two nibble) data
  351.     field.  ASCII characters are called CHAR in the field
  352.     descriptions.  ASCII characters are the basis for the Character
  353.     data type.
  354.  
  355.       1        0
  356.     +-----------+
  357.     | Character |
  358.     +-----------+
  359.           2
  360.  
  361.     **** CODE ****
  362.  
  363.     Machine code is represented as a sequence of nibbles that is the
  364.     machine code.  Machine code is called CODE in the field
  365.     descriptions.  Machine code is the basis for the Code data type.
  366.  
  367.     Examples in this document use the HP mneumonics.
  368.     ================================================================
  369.         System Binary (02911)
  370.     ================================================================
  371.  
  372.     <prolog><data>
  373.  
  374.     <prolog> = 02911 (BIN5)
  375.  
  376.     <data> = five nibble binary integer (BIN5)
  377.  
  378.     There are several tables of System Binary numbers:
  379.  
  380.      addr      HEX    description
  381.     ------    -------  ------------------------------------------------
  382.     03F8B    <2933h>  Real Number prolog
  383.     03F95    <2977h>  Complex Number prolog
  384.     03F9F    <2A74h>  List prolog
  385.     03FA9    <2911h>  Global Name prolog
  386.     03FB3    <2D9Dh>  Program prolog
  387.     03FBD    <2AB8h>  Algebraic prolog
  388.     03FC7    <2A96h>  Directory prolog
  389.     03FD1    <2E6Dh>  Local Name prolog
  390.     03FDB    <2955h>  Long Real prolog
  391.     03FE5    <2ADAh>  Unit prolog
  392.  
  393.      addr     HEX     DEC
  394.     ------    ------    ------
  395.     03FEF    <0h>    <0d>
  396.     03FF9    <1h>    <1d>
  397.     04003    <2h>    <2d>
  398.     0400D    <3h>    <3d>
  399.     04017    <4h>    <4d>
  400.     04021    <5h>    <5d>
  401.     0402B    <6h>    <6d>
  402.     04035    <7h>    <7d>
  403.     0403F    <8h>    <8d>
  404.     04049    <9h>    <9d>
  405.     04053    <Ah>    <10d>
  406.     0405D    <Bh>    <11d>
  407.     04067    <Ch>    <12d>
  408.     04071    <Dh>    <13d>
  409.     04073    <Eh>    <14d>
  410.     04085    <Fh>    <15d>
  411.     0408F    <10h>    <16d>
  412.     04099    <11h>    <17d>
  413.     040A3    <12h>    <18d>
  414.     040AD    <13h>    <19d>
  415.     040B7    <14h>    <20d>
  416.     040C1    <15h>    <21d>
  417.     040CB    <16h>    <22d>
  418.     040D5    <17h>    <23d>
  419.     040DF    <18h>    <24d>
  420.     040E9    <19h>    <25d>
  421.     040F3    <1Ah>    <26d>
  422.     040FD    <1Bh>    <27d>
  423.     04107    <1Ch>    <28d>
  424.     04111    <1Dh>    <29d>
  425.     0411B    <1Eh>    <30d>
  426.     04125    <1Fh>    <31d>
  427.     System Binary (cont)
  428.  
  429.     0412F    <20h>    <32d>
  430.     04139    <21h>    <33d>
  431.     04143    <22h>    <34d>
  432.     0414D    <23h>    <35d>
  433.     04157    <24h>    <36d>
  434.     04161    <25h>    <37d>
  435.     0416B    <26h>    <38d>
  436.     04175    <27h>    <39d>
  437.     0417F    <28h>    <40d>
  438.     04189    <29h>    <41d>
  439.     04193    <2Ah>    <42d>
  440.     0419D    <2Bh>    <43d>
  441.  
  442.     There are several routines to convert between System Binary and
  443.     other data types.  No error checking is performed by these
  444.     routines.
  445.  
  446.      addr     name    description
  447.     ------    ------    ------------------------------------------------
  448.     18CEA    R\->SB    Real Number to System Binary
  449.     18DBF    SB\->R    System Binary to Real Number
  450.  
  451.     Example:
  452.  
  453.     Create a System Binary with a decimal value of 48.
  454.  
  455.     02911 00030
  456.  
  457.     "1192003000C53E" ASC\-> returns <30h>
  458.  
  459.      - or -
  460.  
  461.     48 #18CEAh SYSEVAL returns <30h>
  462.     ================================================================
  463.         Real Number (02933)
  464.     ================================================================
  465.  
  466.     <prolog><data>
  467.  
  468.     <prolog> = 02933 (BIN5)
  469.  
  470.     <data> = 12-form BCD number (BCD12)
  471.  
  472.     There are several tables of Real Number and Long Real numbers:
  473.  
  474.      addr     value
  475.     ------    ----------------
  476.     2A2B4    0
  477.     2A2C9    1
  478.     2A2DF    2
  479.     2A2F3    3
  480.     2A308    4
  481.     2A3D1    5
  482.     2A332    6
  483.     2A347    7
  484.     2A35C    8
  485.     2A371    9
  486.     2A386    -1
  487.     2A39B    -2
  488.     2A3B0    -3
  489.     2A3C5    -4
  490.     2A3DA    -5
  491.     2A3EF    -6
  492.     2A404    -7
  493.     2A419    -8
  494.     2A42E    -9
  495.     2A443    3.14159265359
  496.     2A458    3.14159265358979 (Long Real)
  497.     2A472    9.99999999999E499
  498.     2A487    -9.99999999999E499
  499.     2A49C    1.E-499
  500.     2A4B1    -1.E-499
  501.     2A4C6    0 (Long Real)
  502.     2A4E0    1 (Long Real)
  503.     2A4FA    2 (Long Real)
  504.     2A514    3 (Long Real)
  505.     2A52E    4 (Long Real)
  506.     2A548    5 (Long Real)
  507.     2A562    .1 (Long Real)
  508.     2A57C    .5 (Long Real)
  509.     2A596    10 (Long Real)
  510.  
  511.     There are several routines to convert between Real Number and
  512.     other data types.  No error checking is performed by these
  513.     routines.
  514.  
  515.      addr     name    description
  516.     ------    ------    ------------------------------------------------
  517.     2A5B0    LR->R    Long Real to Real Number
  518.     2A5C1    R->LR    Real Number to Long Real
  519.     Real Number (cont)
  520.  
  521.     Example:
  522.  
  523.     Create a Real Number with the value of the golden mean:
  524.  
  525.     02933 0161863398875000
  526.  
  527.     "3392000057889330816106AB0" ASC\-> returns
  528.         1.61863398875
  529.  
  530.     ================================================================
  531.         Long Real (02955)
  532.     ================================================================
  533.  
  534.     <prolog><data>
  535.  
  536.     <prolog> = 02955 (BIN5)
  537.  
  538.     <data> = 15-form BCD number (BCD15)
  539.     ================================================================
  540.         Complex Number (02977)
  541.     ================================================================
  542.  
  543.     <prolog><real-part><imaginary-part>
  544.  
  545.     <prolog> = 02977 (BIN5)
  546.  
  547.     <real-part> = 12-form BCD number (BCD12)
  548.  
  549.     <imaginary-part> = 12-form BCD number (BCD12)
  550.     ================================================================
  551.         Long Complex (0299D)
  552.     ================================================================
  553.  
  554.     <prolog><real-part><imaginary-part>
  555.  
  556.     <prolog> = 0299D (BIN5)
  557.  
  558.     <real-part> = 15-form BCD number (BCD15)
  559.  
  560.     <imaginary-part> = 15-form BCD number (BCD15)
  561.     ================================================================
  562.         Character (029BF)
  563.     ================================================================
  564.  
  565.     <prolog><data>
  566.  
  567.     <prolog> = 029BF (BIN5)
  568.  
  569.     <data> = ASCII coded character (CHAR)
  570.     ================================================================
  571.         Array (029E8)
  572.     ================================================================
  573.  
  574.     <prolog><size><item-prolog><#dims><dim-1>...<dim-n><item-1>...
  575.         <item-m>
  576.  
  577.     <prolog> = 029EB (BIN5)
  578.  
  579.     <size> = number of nibbles remaining (BIN5)
  580.  
  581.     <item-prolog> = prolog for array elements (BIB5)
  582.  
  583.     <#dims> = number of array dimensions (BIN5)
  584.  
  585.     <dim-i> = i-th dimension (BIN5)
  586.  
  587.     <item-j> = j-th item (ANY)
  588.  
  589.     n = <#dims>
  590.     m = <dim-1> * <dim-2> * ... * <dim-n>
  591.  
  592.     The items in the array are stored in Row Major order (all of the
  593.     first rows elements are group together, followed by the second
  594.     row, and so forth.)
  595.  
  596.     In normal calculator operations:
  597.  
  598.         *    Only one and two dimensional arrays are supported.
  599.  
  600.         *    Only Real Numbers and Complex Numbers are supported as
  601.         array elements (items).
  602.  
  603.     Some assumtions are made about various fields with normal
  604.     operations:
  605.  
  606.         *    If <item-prolog> is not Real Number, then its assumed to
  607.         be Complex Number.
  608.  
  609.         *    If #Dims is not 1, its assumed to be 2.
  610.  
  611.     This applies to the Matrix Editor, GET and so forth.
  612.  
  613.     But the '48 uses other types of arrays internally.  For example,
  614.     message tables are "Array of String".
  615.     ================================================================
  616.         Linked Array (02A0A)
  617.     ================================================================
  618.  
  619.     <prolog><size><???>
  620.  
  621.     <prolog> = 02A0A (BIN5)
  622.  
  623.     <size> = number of nibbles remaining (BIN5)
  624.  
  625.     <???> = undetermined...
  626.     ================================================================
  627.         String (02A2C)
  628.     ================================================================
  629.  
  630.     <prolog><size><data>
  631.  
  632.     <prolog> = 02A2C (BIN5)
  633.  
  634.     <size> = number of nibbles remaining (BIN5)
  635.  
  636.     <data> = (<size>-5)/2 byte character string (ASCII)
  637.     ================================================================
  638.         Binary Integer (02A4E)
  639.     ================================================================
  640.  
  641.     <prolog><size><data>
  642.  
  643.     <prolog> = 02A4E (BIN5)
  644.  
  645.     <size> = number of nibbles remaining (BIN5)
  646.  
  647.     <data> = binary integer (BINx, where x = <size> - 5)
  648.  
  649.     Most Binary Integers have a data size of 16 nibbles or 64 bits
  650.     (<size> = 21).  But some have a smaller data size.  For example,
  651.     the BYTES command returns a Binary Integer (the checksum) with a
  652.     data size of 4 nibbles or 16 bits (<size> = 9), whereas the Hash
  653.     Table in a Library looks like a very large Binary Integer.
  654.     ================================================================
  655.         List (02A74)
  656.     ================================================================
  657.  
  658.     <prolog><object-1>...<object-n><end-marker>
  659.  
  660.     <prolog> = 02A74 (BIN5)
  661.  
  662.     <object-i> = i-th object (ANY)
  663.  
  664.     <end-marker> = 0312B (BIN5)
  665.     ================================================================
  666.         Directory (02A96)
  667.     ================================================================
  668.  
  669.     <prolog><attachments><offset-1><end-dir>
  670.         <name-n><object-n><offset-n>...
  671.         <name-2><object-2><offset-2>
  672.         <name-1><object-1>
  673.  
  674.     <prolog> = 02A96 (BIN5)
  675.  
  676.     <attachments> = see comments (BIN3)
  677.  
  678.     <end-dir> = 00000; end of directory marker (backwards scanned).
  679.         This is in the position that the <offset-n+1> field would
  680.         have occuppied (BIN5)
  681.  
  682.     <offset-i> = offset (backward pointing) from the beginning of
  683.         the i'th offset field to the beginning of the i'th object's
  684.         name.  (BIN5)
  685.  
  686.     <name-i> = the name of the i-th object (ASCIX)
  687.  
  688.     <object-i> = the i'th object in the directory (ANY)
  689.  
  690.     Comments:
  691.  
  692.     The meaning of the <attachments> field is based on whether or
  693.     not the directory is the HOME directory.
  694.  
  695.     HOME directory:  the <attachments> field contains the number of
  696.     libraries attached to the HOME directory, including the default,
  697.     'hidden' libraries: Library 2, standard functions; Library 1792,
  698.     flow control statments.
  699.  
  700.     Subdirectory:  the <attachments> field contains the library
  701.     number of the library attached to this subdirectory or 7FF if
  702.     no library is attached.
  703.     ================================================================
  704.         Algebraic (02AB8)
  705.     ================================================================
  706.  
  707.     <prolog> ... <end-marker>
  708.  
  709.     <prolog> = 02AB8 (BIN5)
  710.  
  711.     The "..." part is a sequence of objects and operations.
  712.  
  713.     <end-marker> = 0312B (BIN5)
  714.  
  715.     Example:
  716.  
  717.     Create the expression 'A-2'.
  718.  
  719.     02AB8        Algebraic
  720.     02E48 01 41    'A' (Global Name)
  721.     2A2DE        2 (address in ROM)
  722.     1AD09        -
  723.     0312B        End Marker
  724.  
  725.     "8BA2084E201014ED2A209DA1B21303637" ASC\-> returns
  726.         'A-2'
  727.     ================================================================
  728.         Unit (02ADA)
  729.     ================================================================
  730.  
  731.     <prolog><numeric-data><unit-1>...<unit-n><operation-1>...
  732.         <operation-n><end-marker>
  733.  
  734.     <prolog> = 02ADA (BIN5)
  735.  
  736.     <numeric-data> = the base data, if not Real Number, then will
  737.         be displayed as UNKNOWN (ANY)
  738.  
  739.     <unit-i> = unit component (normally String or Real Number) (ANY)
  740.  
  741.     <operation-j> = unit arithmetic indicator.  These indicators
  742.         point to null lists { }, but are interpreted by the OS as
  743.         simple unit operations (* / and so forth) (BIN5)
  744.  
  745.         10B5E * (unit operator)
  746.         10B68 / (unit operator)
  747.         10B72 ^ (unit operator)
  748.         10B7C Character prefix (unit operator)
  749.         10B86 _ (unit operator)
  750.  
  751.     <end-marker> = 0312B (BIN5)
  752.     ================================================================
  753.         Tagged (02AFC)
  754.     ================================================================
  755.  
  756.     <prolog><name><object>
  757.  
  758.     <prolog> = 02AFC (BIN5)
  759.  
  760.     <name> = the tag (ASCIC)
  761.  
  762.     <object> = the tagged object (ANY)
  763.  
  764.     Example:
  765.     Create a the Real Number 1.23456789012 with a tag of "ABC"
  766.  
  767.     02AFC 03 41 42 43 02933 0123456789012000
  768.  
  769.     "CFA20301424343392000021098765432107141" ASC\-> returns
  770.         ABC: 1.23456789012
  771.     ================================================================
  772.         Graphic (02B1E)
  773.     ================================================================
  774.  
  775.     <prolog><size><#rows><#columns><data>
  776.  
  777.     <prolog> = 02B1E (BIN5)
  778.  
  779.     <size> = number of nibbles remaining (BIN5)
  780.  
  781.     <#rows> = number of pixel rows (BIN5)
  782.  
  783.     <#columns> = number of pixel columns (BIN5)
  784.  
  785.     <data> = graphic data, <size>-15 nibbles (BINx)
  786.  
  787.     Each pixel in the Graphic is represented by a bit in <data>.
  788.     The pixels are grouped first by row and then by column.
  789.  
  790.     The pixels for each row run for left to right and the bits for
  791.     those pixels run from least significant bit to most significant
  792.     bit.  Note that each row of pixels is padded to an even number
  793.     of nibbles.  For example:  a normal 131 X 64 Graphic requires
  794.     34 nibbles (136 bits) per row for a total of 2176 nibbles (not
  795.     counting the overhead of 20 nibbles).
  796.  
  797.     X = <#columns> - 1
  798.     Y = <#rows> - 1
  799.  
  800.        0                       X
  801.       +-------------------------+
  802.     0 |                         |
  803.       |                         |
  804.       |         Display         |
  805.       |                         |
  806.     Y |                         |
  807.       +-------------------------+
  808.  
  809.     M = <#rows> - 1
  810.     N = 2*CEIL(<#columns>/8) - 1
  811.     N' = unpadded row size
  812.     ??? = padding
  813.  
  814.       N  N'                     0
  815.     +---+-->>--------------------+
  816.     |???|                        |  Row 0
  817.     +---+--<<--------------------+
  818.     |???|                        |  Row 1
  819.     +---+-->>--------------------+
  820.         :            :
  821.     +---+-->>--------------------+
  822.     |???|                        |  Row M
  823.     +---+--<<--------------------+
  824.     ================================================================
  825.         Library (02B40)
  826.     ================================================================
  827.  
  828.     <prolog><size><library-name><library-number><hash-table-offset>
  829.         <message-table-offset><link-table-offset><config-offset>
  830.         <bulk-of-library><checksum>
  831.  
  832.     <prolog> = 02B40 (BIN5)
  833.  
  834.     <size> = number of nibbles remaining (BIN5)
  835.  
  836.     <library-name> = Extended ASCII counted character string (ASCIX)
  837.  
  838.     <library-number> = library number (BIN3)
  839.  
  840.     <hash-table-offset> = offset to hash table (BIN5)
  841.  
  842.     <message-table-offset> = offset to message table (BIN5)
  843.  
  844.     <link-table-offset> = offset to link table (BIN5)
  845.  
  846.     <config-offset> = offset to configuration code (BIN5)
  847.  
  848.     <bulk-of-library> : <hash-table>, <message-table>, <link-table>,
  849.         <config-code> and the rest (in any order)
  850.  
  851.     <checksum> = internal library checksum (BIN4)
  852.  
  853.     <hash-table> : <ht-prolog><ht-size><offset-1>...<offset-16>
  854.         <nt-size><nt-entry-1>...<nt-entry-n><nt-offset-1>...
  855.         <nt-offset-n>
  856.  
  857.     <ht-prolog> = 02A4E (Binary Integer) (BIN5)
  858.  
  859.     <ht-size> = size of hash table without the prolog (BIN5)
  860.  
  861.     <offset-i> = offset into the name table for the first command
  862.         with an i-character name (BIN5)
  863.  
  864.     <nt-size> = size in nibbles of the name table (BIN5)
  865.  
  866.     <nt-entry-j> : <command-name><xlib-number>
  867.  
  868.     <command-name> = ASCII counted character string (ASCIC)
  869.  
  870.     <xlib-number> = XLIB command number (BIN3)
  871.  
  872.     <nt-offset-k> = offset to <nt-entry-j> for XLIB command k (BIN5)
  873.         This offset is backward pointing.
  874.  
  875.     <message-table> = Array of String.  Each array element is a
  876.         message.
  877.  
  878.     <link-table> : <lt-prolog><lt-size><lt-entry-1>...<lt-entry-n>
  879.  
  880.     <lt-prolog> = 02A4E (BIN5)
  881.  
  882.     <lt-size> = size of link table without the prolog (BIN5)
  883.     Library (cont)
  884.  
  885.     <lt-entry-i> = offset to i-th command in this library (BIN5)
  886.  
  887.     <config-code> = RPL subprogram that performs configuration
  888.         commands
  889.  
  890.     Comments:
  891.  
  892.     The hash table and link table are very large Binary Integers.
  893.     The message table is an Array of String.
  894.  
  895.     The hash-table, message-table, link-table and config may be
  896.     referenced through a System Binary.  For example, the hash-table
  897.     offset could point to a System Binary which in turn points to
  898.     the real hash-table.
  899.  
  900.     Although the HP 48SX does not contain any Library objects
  901.     itself, it clearly makes use of libraries.  It turns out that
  902.     the HP $*SX does contain part of the library header.  I call
  903.     these things "short libraries".  You can unthread short
  904.     libraries with the Voyager command EXAMINE LIBRARY.
  905.  
  906.     <short-library> : <library-number><hash-table-offset>
  907.         <message-table-offset><link-table-offset><config-offset>
  908.  
  909.     Example:
  910.  
  911.     Unthread part of the stop watch library.  See the Voayager
  912.     Reference Manual for details on Voyager commands.
  913.  
  914.     Voyager> load 1 sw-a
  915.     Voyager> ut 80000
  916.     80000: ; *** Library 768: SW-A ***
  917.     80000: 02B40 ! Library
  918.     80005: 01608 ! 5640 nibbles (next RPL at 8160D)
  919.     8000A: [...] ! Library name: "SW-A"
  920.     80016: 300   ! Library 300 (XLIB 768)
  921.     80019: 00014 ! Hash table at 8002D
  922.     8001E: 001F2 ! Message table at 80210
  923.     80023: 00107 ! Link table at 8012A
  924.     80028: 01543 ! Configuration code at 8156B
  925.     Voyager> exam hash 8002D 300
  926.     8002D: ; *** Hash table for library 300 (XLIB 768) ***
  927.     8002D: 02A4E ! (Binary Integer)
  928.     80032: 000F8 ! 248 nibbles (next at 8012A)
  929.     80037: 00000 !    1 none
  930.     8003C: 00000 !    2 none
  931.     80041: 00000 !    3 none
  932.     80046: 00046 !    4 at 8008C
  933.     8004B: 00000 !    5 none
  934.     80050: 00000 !    6 none
  935.     80055: 00085 !    7 at 800DA
  936.     8005A: 00093 !    8 at 800ED
  937.     8005F: 00000 !    9 none
  938.     80064: 00000 !   10 none
  939.     80069: 00000 !   11 none
  940.     8006E: 00000 !   12 none
  941.     Library (cont)
  942.  
  943.     80073: 00000 !   13 none
  944.     80078: 00000 !   14 none
  945.     8007D: 00000 !   15 none
  946.     80082: 00000 !   16 none
  947.     80087: 0007B ! 123 nibbles (next at 80102)
  948.     8008C: [...] !   DOSW (XLIB 768 0)
  949.     80099: [...] !   PALL (XLIB 768 5)
  950.     800A6: [...] !   PSP+ (XLIB 768 4)
  951.     800B3: [...] !   VALL (XLIB 768 3)
  952.     800C0: [...] !   VSP+ (XLIB 768 1)
  953.     800CD: [...] !   VSP- (XLIB 768 2)
  954.     800DA: [...] !   RESETSW (XLIB 768 7)
  955.     800ED: [...] !   RCLSPLIT (XLIB 768 6)
  956.     80102: 00076 !   name for XLIB 768 0 at 8008C
  957.     80107: 00047 !   name for XLIB 768 1 at 800C0
  958.     8010C: 0003F !   name for XLIB 768 2 at 800CD
  959.     80111: 0005E !   name for XLIB 768 3 at 800B3
  960.     80116: 00070 !   name for XLIB 768 4 at 800A6
  961.     8011B: 00082 !   name for XLIB 768 5 at 80099
  962.     80120: 00033 !   name for XLIB 768 6 at 800ED
  963.     80125: 0004B !   name for XLIB 768 7 at 800DA
  964.     Voyager> exam link 8012A 300
  965.     8012A: ; *** Link table for library 300 (XLIB 768) ***
  966.     8012A: 02A4E ! (Binary Integer)
  967.     8012F: 000E1 ! 225 nibbles (next at 80210)
  968.     80134: 00167 !   XLIB 768 0 at 8029B
  969.     80139: 00183 !   XLIB 768 1 at 802BC
  970.     8013E: 001A4 !   XLIB 768 2 at 802E2
  971.     80143: 001C5 !   XLIB 768 3 at 80308
  972.     80148: 001E1 !   XLIB 768 4 at 80329
  973.     8014D: 00202 !   XLIB 768 5 at 8034F
  974.     80152: 0021E !   XLIB 768 6 at 80370
  975.     80157: 0023F !   XLIB 768 7 at 80396
  976.     8015C: 00254 !   XLIB 768 8 at 803B0
  977.     80161: 002DE !   XLIB 768 9 at 8043F
  978.     80166: 00303 !   XLIB 768 10 at 80469
  979.     8016B: 00328 !   XLIB 768 11 at 80493
  980.     80170: 0037D !   XLIB 768 12 at 804ED
  981.     80175: 0044F !   XLIB 768 13 at 805C4
  982.     8017A: 004E7 !   XLIB 768 14 at 80661
  983.     8017F: 00500 !   XLIB 768 15 at 8067F
  984.     80184: 00514 !   XLIB 768 16 at 80698
  985.     80189: 005BC !   XLIB 768 17 at 80745
  986.     8018E: 005E1 !   XLIB 768 18 at 8076F
  987.     80193: 00605 !   XLIB 768 19 at 80798
  988.     80198: 0069D !   XLIB 768 20 at 80835
  989.     8019D: 006CD !   XLIB 768 21 at 8086A
  990.     801A2: 0072A !   XLIB 768 22 at 808CC
  991.     801A7: 00753 !   XLIB 768 23 at 808FA
  992.     801AC: 00792 !   XLIB 768 24 at 8093E
  993.     801B1: 00819 !   XLIB 768 25 at 809CA
  994.     801B6: 00832 !   XLIB 768 26 at 809E8
  995.     801BB: 008B1 !   XLIB 768 27 at 80A6C
  996.     801C0: 008DA !   XLIB 768 28 at 80A9A
  997.     801C5: 00E8C !   XLIB 768 29 at 81051
  998.     Library (cont)
  999.  
  1000.     801CA: 00F55 !   XLIB 768 30 at 8111F
  1001.     801CF: 00F95 !   XLIB 768 31 at 81164
  1002.     801D4: 00FBC !   XLIB 768 32 at 81190
  1003.     801D9: 00FE7 !   XLIB 768 33 at 811C0
  1004.     801DE: 010AC !   XLIB 768 34 at 8128A
  1005.     801E3: 0111D !   XLIB 768 35 at 81300
  1006.     801E8: 0113A !   XLIB 768 36 at 81322
  1007.     801ED: 01155 !   XLIB 768 37 at 81342
  1008.     801F2: 0116A !   XLIB 768 38 at 8135C
  1009.     801F7: 011EE !   XLIB 768 39 at 813E5
  1010.     801FC: 0136F !   XLIB 768 40 at 8156B
  1011.     80201: 01383 !   XLIB 768 41 at 81584
  1012.     80206: 01396 !   XLIB 768 42 at 8159C
  1013.     8020B: 013A9 !   XLIB 768 43 at 815B4
  1014.     Voyager> exam message 80210 300
  1015.     80210: ; *** Message table for library 300 (XLIB 768) ***
  1016.     80210: 029E8 ! Array
  1017.     80215: 0007F ! 127 nibbles
  1018.     8021A: 02A2C ! ...of String
  1019.     8021F: 00001 ! 1 dimensional
  1020.     80224: 00003 ! Dim-1 = 3
  1021.      . . . . . . ! 3 total elements
  1022.     80229: [...] ! "Invalid SWDAT"
  1023.     80248: [...] ! "Invalid Split#"
  1024.     80269: [...] ! "Invalid Environment"
  1025.     Voyager> ut 8156B
  1026.     8156B: ; *** Configuaration code for library 300 (XLIB 768 40) ***
  1027.     8156B: 02D9D ! Program
  1028.     81570: [...] ! <300h>
  1029.     8157A: 07709 ; Internal ATTACH to HOME directory (1:System Binary)
  1030.     8157F: 0312B ! End Marker
  1031.     Voyager> ut 8029B
  1032.     8029B: ; *** DOSW (XLIB 768 0) ***
  1033.     8029B: 02D9D ! Program
  1034.     802A0: 18A1E ; Save current command, stack size, clear @706FD.S
  1035.     802A5: [...] ! XLIB 768 8
  1036.     802B0: 0312B ! End Marker
  1037.     Voyager> exit
  1038.     ================================================================
  1039.         Backup (02B62)
  1040.     ================================================================
  1041.  
  1042.     <prolog><size><name><data><???>
  1043.  
  1044.     <prolog> = 02B62 (BIN5)
  1045.  
  1046.     <size> = number of nibbles remaining (BIN5)
  1047.  
  1048.     <name> = the name of the backup (ASCIX)
  1049.  
  1050.     <data> = the backed-up data (ANY)
  1051.  
  1052.     <???> = a System Binary, possably a checksum.
  1053.     ================================================================
  1054.         Library Data (02B88)
  1055.     ================================================================
  1056.  
  1057.     <prolog><size><ident><data-1>...<data-n><end-marker>
  1058.  
  1059.     <prolog> = 02B88 (BIN5)
  1060.  
  1061.     <size> = number of nibbles remaining (BIN5)
  1062.  
  1063.     <ident> = <library-number><object-number> (BIN5)
  1064.  
  1065.     <library-number> = library number (BIN3)
  1066.  
  1067.     <object-number> = object number (library specific) (BIN2)
  1068.  
  1069.     <data-i> = the 'hidden' library data (ANY)
  1070.  
  1071.     <end-marker> = 0312B (BIN5)
  1072.  
  1073.     Example:
  1074.  
  1075.     What's in 'MHpar' (MINEHUNT parameter) (EQ Library required)?
  1076.  
  1077.     Download a copy of MHpar to your PC:
  1078.  
  1079.     MINEHUNT STO
  1080.     'MHpar' SEND
  1081.  
  1082.     Revice MHpar and convert it to a Voyager MEM file:
  1083.  
  1084.     C> kermit receive
  1085.     C> bintomem mhpar.
  1086.  
  1087.     Use Voyager to examine MHpar:
  1088.  
  1089.     C> voyager
  1090.     Voyager> load 1 mhpar
  1091.     Voyager> ut 80000
  1092.     80000: 02B88 ! Library Data
  1093.     80005: 009C6 ! 2502 nibbles (next RPL at 809CB)
  1094.     8000A: 0010C ! ident: 10C/00 (268/0)
  1095.     8000F: 02A74 ! List
  1096.      . . . . . . ! {
  1097.     80014: 02B1E ! Graphic
  1098.     80019: 0088F ! 2191 nibbles (next at 808A8)
  1099.     8001E: 00040 ! 64 rows
  1100.     80023: 00088 ! 136 columns
  1101.     80028: [...] ! 00002D9C080445A3300003BB9306000000
  1102.     8004A: [...] ! 8D106545141C6DA80000888AA80400CD00
  1103.     8006C: [...] ! 8300EDDD04145DB31000098A9304000E00
  1104.     8008E: [...] ! CF00A545141445B020000A8AA804008F10
  1105.     800B0: [...] ! 20102D55180445AB100081BBA30E004020
  1106.     800D2: [...] ! CF00000000000000000000000000008F10
  1107.     800F4: [...] ! 0000000000000000000000000000000000
  1108.     80116: [...] ! 00EFFFFFFFFFFFFFFFFFFFFFFFFFFF3000
  1109.     80138: [...] ! 00EF180402018040201804020180402000
  1110.     8015A: [...] ! 00EC180402018040201804020180402000
  1111.     8017C: [...] ! 0068180402018040201804020180402000
  1112.     Library Data (cont)
  1113.  
  1114.     8019E: [...] ! 4468180402018040201804020180402110
  1115.     801C0: [...] ! C6EC180402018040201804020180402B10
  1116.     801E2: [...] ! 45EF180402018040201804020180402510
  1117.     80204: [...] ! 44EFFFFFFFFFFFFFFFFFFFFFFFFFFF3110
  1118.     80226: [...] ! 4420180402018040201804020180402110
  1119.     80248: [...] ! 0020180402018040201804020180402000
  1120.     8026A: [...] ! C720180402018040201804020180402F10
  1121.     8028C: [...] ! 0120180402018040201804020180402400
  1122.     802AE: [...] ! 0120180402018040201804020180402400
  1123.     802D0: [...] ! 0120180402018040201804020180402400
  1124.     802F2: [...] ! C7EFFFFFFFFFFFFFFFFFFFFFFFFFFF3F10
  1125.     80314: [...] ! 0020180402018040201804020180402000
  1126.     80336: [...] ! 4420180402018040201804020180402110
  1127.     80358: [...] ! C420180402018040201804020180402310
  1128.     8037A: [...] ! 4520180402018040201804020180402510
  1129.     8039C: [...] ! 4620180402018040201804020180402910
  1130.     803BE: [...] ! 4420180402018040201804020180402110
  1131.     803E0: [...] ! 00EFFFFFFFFFFFFFFFFFFFFFFFFFFF3000
  1132.     80402: [...] ! C720180402018040201804020180402F10
  1133.     80424: [...] ! 4020180402018040201804020180402100
  1134.     80446: [...] ! C320180402018040201804020180402F00
  1135.     80468: [...] ! 4020180402018040201804020180402100
  1136.     8048A: [...] ! C720180402018040201804020180402F10
  1137.     804AC: [...] ! 0020180402018040201804020180402000
  1138.     804CE: [...] ! 44EFFFFFFFFFFFFFFFFFFFFFFFFFFF3110
  1139.     804F0: [...] ! 4420180402018040201804020180402110
  1140.     80512: [...] ! C720180402018040201804020180402F10
  1141.     80534: [...] ! 4420180402018040201804020180402110
  1142.     80556: [...] ! 4420180402018040201804020180402110
  1143.     80578: [...] ! 0020180402018040201804020180402000
  1144.     8059A: [...] ! 4420180402018040201804020180402110
  1145.     805BC: [...] ! 44EFFFFFFFFFFFFFFFFFFFFFFFFFFF3110
  1146.     805DE: [...] ! 4420180402018040201804020180402110
  1147.     80600: [...] ! 4420180402018040201804020180402110
  1148.     80622: [...] ! 8320180402018040201804020180402E00
  1149.     80644: [...] ! 0020180402018040201804020180402000
  1150.     80666: [...] ! 4420180402018040201804020180402110
  1151.     80688: [...] ! C420180402018040201804020180402310
  1152.     806AA: [...] ! 45EFFFFFFFFFFFFFFFFFFFFFFFFFFF3510
  1153.     806CC: [...] ! 4620180402018040201804020180402910
  1154.     806EE: [...] ! 4420180402018040201804020180402110
  1155.     80710: [...] ! 0020180402018040201804020180402000
  1156.     80732: [...] ! C720180402018040201804020180402F10
  1157.     80754: [...] ! 0120180402018040201804020180402400
  1158.     80776: [...] ! 0120180402018040201804020180402400
  1159.     80798: [...] ! 01EFFFFFFFFFFFFFFFFFFFFFFFFFFF3400
  1160.     807BA: [...] ! 0120180402018040201804020180CA2400
  1161.     807DC: [...] ! 0120180402018040201804020180453400
  1162.     807FE: [...] ! 0020180402018040201804020180CA2000
  1163.     80820: [...] ! 0020180402018040201804020180453000
  1164.     80842: [...] ! 0020180402018040201804020180CA2000
  1165.     80864: [...] ! C720180402018040201804020180453F10
  1166.     80886: [...] ! EFEFFFFFFFFFFFFFFFFFFFFFFFFFFFBF30
  1167.      . . . . . . ! End of Graphic
  1168.     808A8: 03FF9 ; <1h>
  1169.     808AD: 03FF9 ; <1h>
  1170.     808B2: 03FF9 ; <1h>
  1171.     Library Data (cont)
  1172.  
  1173.     808B7: [...] ! "20000000001001000001000000000010
  1174.     80901: [...] ! 00001101000110000000001000100001
  1175.     80941: [...] ! 00000010001000000000000000001001
  1176.     80981: [...] ! 00000010010000000001000000010000"
  1177.     809C1: 0312B ! End Marker
  1178.      . . . . . . ! }
  1179.     809C6: 0312B ; End Marker
  1180.      . . . . . . ! End of Library Data
  1181.     Voyager> exit
  1182.     ================================================================
  1183.         Program (02D9D)
  1184.     ================================================================
  1185.  
  1186.     <prolog> ... <end-marker>
  1187.  
  1188.     <prolog> = 02D9D (BIN5)
  1189.  
  1190.     The "..." part is a sequence of objects.
  1191.  
  1192.     <end-marker> = 0312B (BIN5)
  1193.  
  1194.     Examples:
  1195.  
  1196.     1) Write a strictly user-mode program to drop the stack level
  1197.     two object.  This operation is called NIP by some people.
  1198.  
  1199.     02D9D    Program
  1200.     2361E    \<<
  1201.     1FBBD      SWAP
  1202.     1FBD8      DROP
  1203.     23639    \>>
  1204.     0312B    End Marker
  1205.  
  1206.     "D9D29E1632DBBE18DDF193632B21306A65" ASC\-> returns
  1207.         \<< SWAP DROP \>>
  1208.  
  1209.     2) Write the same program using internal routines, with error
  1210.     checking (standalone version, non-library).
  1211.  
  1212.     02D9D    Program
  1213.     18A8D    Verify DEPTH >= 2
  1214.     60F9B    drop level two object
  1215.     0312B    End Marker
  1216.  
  1217.     "D9D20D8A81B9F06B2130D01D" ASC\-> returns
  1218.         External External
  1219.     ================================================================
  1220.         Code (02DCC)
  1221.     ================================================================
  1222.  
  1223.     <prolog><size><machine-code>
  1224.  
  1225.     <prolog> = 02DCC (BIN5)
  1226.  
  1227.     <size> = number of nibbles remaining (BIN5)
  1228.  
  1229.     <machine-code> = machine code (<size>-5 nibbles) (CODE)
  1230.     ================================================================
  1231.         Global Name (02E48)
  1232.     ================================================================
  1233.  
  1234.     <prolog><name>
  1235.  
  1236.     <prolog> = 02E48 (BIN5)
  1237.  
  1238.     <name> = ASCII counted character string (ASCIC)
  1239.  
  1240.     Example:
  1241.     Create a Global Name called 'GBL'.
  1242.  
  1243.     02E48 03 47 42 4C
  1244.  
  1245.     "84E20307424C4A205" ASC\-> returns 'GBL'
  1246.     ================================================================
  1247.         Local Name (02E6D)
  1248.     ================================================================
  1249.  
  1250.     <prolog><name>
  1251.  
  1252.     <prolog> = 02E6D (BIN5)
  1253.  
  1254.     <name> = ASCII counted character string (ASCIC)
  1255.  
  1256.     Example:
  1257.     Create a Local Name called 'LCL'.
  1258.  
  1259.     02E6D 03 4C 43 4C
  1260.  
  1261.     "D6E2030C434C4DCA1" ASC\-> returns 'LCL'
  1262.     Executing EVAL at this point will generate an 'EVAL Error:
  1263.     Undefined Local Name'.
  1264.     ================================================================
  1265.         XLIB Name (02E92)
  1266.     ================================================================
  1267.  
  1268.     <prolog><library-number><object-number>
  1269.  
  1270.     <prolog> = 02E92 (BIN5)
  1271.  
  1272.     <library-number> = library number (BIN3)
  1273.  
  1274.     <object-number> = object number with library (BIN3)
  1275.  
  1276.     Example:
  1277.     The XLIB name for the EQ Library's MINEHUNT is XLIB 268 0
  1278.  
  1279.     02E92 10C 000
  1280.  
  1281.     If you have the EQ Library:
  1282.     "29E20C01000FEA7" ASC\-> returns MINEHUNT
  1283.  
  1284.     If you don't:
  1285.     "29E20C01000FEA7" ASC\-> returns XLIB 268 0
  1286.